【新機能】VPC Flow LogsでVPC内のIPトラフィックを監視することができるようになりました!
こんにちは、せーのです。今日は障害監視やネットワークの不通時などに非常に役立ちそうな新機能をご紹介します。
VPC Flow Logs
システムを構築する場合、特に業務サービスを展開する場合はネットワーク内部のフロー通信ログを監視、分析してネットワーク内に異常なアクセスがないか、通信すべき経路が不通なことは無いかを確認しておくことは運用上非常に重要な要件となります。今回の新機能となるVPC Flow LogsでVPC内のNetwork Interface間のIPトラフィックをキャプチャすることができるようになりました!
VPC Flow Logs データはCloudWatch Logsに格納され、自由に可視化することが出来ます。CloudWatch Logsに格納される、ということはあらかじめ特定のトラフィックを設定しておくことでアラートを発生させることもできるわけです。Lambdaを組み合わせて緊急的にトラフィックを遮断したり、管理者に対してWarningメールを投げたりとあらゆるセキュリティ施策と組み合わせる事もできます。 セキュリティ以外にもカスタムメトリクスを設定することでどういう通信が多いのか、それによってどのようにアプリケーションやAWSインフラの構成を変えるべきなのかを判断する条件として利用することもできます。これは夢が広がりますね!
VPC FLow Logsの中身
VPC Flow Logsにはこのようなデータが含まれます。
フィールド | 内容 |
---|---|
version | VPC Flow Logsのバージョン |
account-id | アカウントID |
interface-id | 対象となるNetwork Interface ID |
srcaddr | 送信元IPアドレス(プライベートIP) |
dstaddr | 宛先IPアドレス(プライベートIP) |
srcport | 送信元ポート |
dstport | 宛先ポート |
protocol | プロトコル番号 |
packets | 転送パケット数 |
bytes | 転送バイト数 |
start | キャプチャ開始時刻(Unix) |
end | キャプチャ終了時刻(Unix) |
action | アクション(ACCEPT:許可 / REJECT:拒否) |
log-status | ステータス(OK:正常 / NODATA:トラフィックなし / SKIPDATA:エラーやキャパシティ制限によりスキップ) |
制限事項
VPC FLow Logsの制限事項は
- EC2 Classicには使えない
- VPC Peeringには使えない
- タグ付けはできない
- 一度Flow Logsを作成したら変更はできない(IAMロールの変更等)。変更する場合は一度削除してから作り直す
- リソースレベルのアクセス許可はできない。Flow Logsを使用する際は全てのリソースに対してワイルドカードにてLogsに対して権限を付与する必要がある
記録されないログパターン
VPC Flow Logsはこれらのトラフィックは記録しません。
- インスタンスからAmazon DNSに対して生成されるトラフィック(独自DNSサーバーを使用する場合は記録される)
- WindowsインスタンスからWindowsアクティベートの為に生成されるトラフィック
- インスタンスmetaデータ(169.254.169.254)へのトラフィック
- DHCPトラフィック
やってみた
では早速やってみましょう。まずFlow Logsを格納するCloudWatch Logsのグループを作成しておきます。
それではVPCを一つ作成します。作成したVPCを選択しActionsボタンから[Create Flow Log]をクリックします。
Flow Logsの作成画面がポップアップされますので適用するIAM Roleを選択します。今回は[Set Up Permissions]リンクから新規に作成します。
IAM Roleの作成画面です。このようなポリシーが自動生成されていますのでそのまま許可してみましょう。ポイントはResource全てに対してLogsアクションが許可されているところですね。
IAM Roleの作成後にFlow Logsの作成画面に戻ると先程作ったIAM Roleが選択できるようになっています。
次に最初に作ったCloudWatch LogsのグループをFlow Logsの格納先として選択します。これで作成ボタンを押せば選択したVPCに対してFlow Logsが作成されます。
ではその他のリソースをサクッと作ってみましょう。今回はサブネットを2つ作成し、そこにEC2を1つずつ立てました。セキュリティグループとしてはSSH(22)とHTTP(80)を許可し、EC2の中にApacheを立ててみます。SSHでのログイン、ping通信、外部からそれぞれのEC2へのアクセスを行います。Flow Logsは約15分後に作成されます。
$ ssh [email protected] -i ~/dev/key/cm_experimentation.pem Warning: Permanently added '52.68.30.223' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/ [ec2-user@ip-10-0-0-147 ~]$ sudo yum update -y [ec2-user@ip-10-0-0-147 ~]$ sudo yum install httpd -y [ec2-user@ip-10-0-0-147 ~]$ sudo /etc/init.d/httpd start httpd を起動中: httpd: apr_sockaddr_info_get() failed for ip-10-0-0-147 httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName [ OK ] [ec2-user@ip-10-0-0-147 ~]$ ping 10.0.1.12 PING 10.0.1.12 (10.0.1.12) 56(84) bytes of data. 64 bytes from 10.0.1.12: icmp_seq=52 ttl=64 time=2.36 ms 64 bytes from 10.0.1.12: icmp_seq=53 ttl=64 time=2.41 ms 64 bytes from 10.0.1.12: icmp_seq=54 ttl=64 time=2.32 ms 64 bytes from 10.0.1.12: icmp_seq=55 ttl=64 time=2.32 ms 64 bytes from 10.0.1.12: icmp_seq=56 ttl=64 time=2.39 ms 64 bytes from 10.0.1.12: icmp_seq=57 ttl=64 time=2.32 ms --- 10.0.1.12 ping statistics --- 61 packets transmitted, 10 received, 83% packet loss, time 60634ms rtt min/avg/max/mdev = 2.284/2.362/2.427/0.059 ms
ではCloudWatch Logsを見てみましょう。
おお、入っていますね。ブラウザアクセスの80番もキッチリ記録されています。これは色々つかえそうですね!
まとめ
いかがでしたでしょうか。トラフィック監視はかなり重要な機能となります。恐らく構築時のスタンダードとなるのではないでしょうか。是非とも設定方法を覚えてしまいましょう!